/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package projetbi_dao;

import java.sql.Statement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

import projetbi_objets.OSuiviEtPositionnement;

/**
 * Projet BI - M2 FIC 2012-2013
 *
 * @author Jef, Tuan-Long, William, Mohamed
 */
public class DAOSuiviEtPositionnement extends DAO<OSuiviEtPositionnement> {

    /**
     *
     * @param obj L'objet à ajouter à la base de données <br/>
     *
     * requires <br/>
     *
     * ensures <br/>
     *   // La table en question n'est pas vide
     */
    @Override
    public OSuiviEtPositionnement create(OSuiviEtPositionnement obj) {
        Connection connect = this.connect;
        String sql = "INSERT INTO `suivietpositionnement` (`idSuiviEtPositionnement`, `idFormation`, `idCollaborateur`, `idClient`, `salaireMission`, `jourDebut`, `moisDebut`, `anneeDebut`, `jourFin`, `moisFin`, `anneeFin`, `dureeMission`, `intituleProjet`, `idfonction`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
        try {
            PreparedStatement ps = (PreparedStatement) connect.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
            ps.setInt(1, 0);
            ps.setInt(2, obj.getIdFormation());
            ps.setInt(3, obj.getIdCollaborateur());
            ps.setInt(4, obj.getIdClient());
            ps.setInt(5, obj.getSalaireMission());
            ps.setInt(6, obj.getJourDebut());
            ps.setInt(7, obj.getMoisDebut());
            ps.setInt(8, obj.getAnneeDebut());
            ps.setInt(9, obj.getJourFin());
            ps.setInt(10, obj.getMoisFin());
            ps.setInt(11, obj.getAnneeFin());
            ps.setInt(12, obj.getDureeMission());
            ps.setString(13, obj.getIntituleProjet());
            ps.setInt(14, obj.getIdFonction());
            ps.executeUpdate();
            ResultSet rs = ps.getGeneratedKeys();
            if (rs.next()) {
                obj.setIdSuiviEtPositionnement(rs.getInt(1));
            }
            ps.close();

        } catch (SQLException ex) {
            Logger.getLogger(DAOSuiviEtPositionnement.class.getName()).log(Level.SEVERE, null, ex);
        }


        return obj;
    }

    /**
     *
     * @param id L'identifiant de l'objet que l'on cherche dans la base <br/>
     *
     * requires <br/>
     *
     * ensures <br/>
     *
     */
    @Override
    public OSuiviEtPositionnement find(int id) {
        OSuiviEtPositionnement lang = new OSuiviEtPositionnement();
        try {
            ResultSet result = this.connect
                    .createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE).executeQuery(
                    "SELECT * FROM suivietpositionnement WHERE idSuiviEtPositionnement = " + id);
            if (result.first()) {
                lang = new OSuiviEtPositionnement(
                        id,
                        result.getInt("idFormation"),
                        result.getInt("idCollaborateur"),
                        result.getInt("idClient"),
                        result.getInt("salaireMission"),
                        result.getInt("jourDebut"),
                        result.getInt("moisDebut"),
                        result.getInt("anneeDebut"),
                        result.getInt("jourFin"),
                        result.getInt("moisFin"),
                        result.getInt("anneeFin"),
                        result.getInt("dureeMission"),
                        result.getString("intituleProjet"),
                        result.getInt("idfonction"));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }

        return lang;

    }

    // Update : mise à jour d'un objet en base.
    @Override
    public OSuiviEtPositionnement update(OSuiviEtPositionnement obj) {
        Connection connect = this.connect;
        String sql = "UPDATE suivietpositionnement SET idFormation = ?, "
                + "idCollaborateur = ?, idClient = ?, salaireMission = ?, "
                + "jourDebut = ?, moisDebut = ?, anneeDebut = ?, jourFin = ?, "
                + "moisFin = ?, anneeFin = ?, dureeMission = ?,  intituleProjet = ?, "
                + "idfonction = ? "
                + "WHERE idSuiviEtPositionnement = ?";
        try {
            PreparedStatement ps = connect.prepareStatement(sql);
            ps.setInt(1, obj.getIdFormation());
            ps.setInt(2, obj.getIdCollaborateur());
            ps.setInt(3, obj.getIdClient());
            ps.setInt(4, obj.getSalaireMission());
            ps.setInt(5, obj.getJourDebut());
            ps.setInt(6, obj.getMoisDebut());
            ps.setInt(7, obj.getAnneeDebut());
            ps.setInt(8, obj.getJourFin());
            ps.setInt(9, obj.getMoisFin());
            ps.setInt(10, obj.getAnneeFin());
            ps.setInt(11, obj.getDureeMission());
            ps.setString(12, obj.getIntituleProjet());
            ps.setInt(13, obj.getIdFonction());
            ps.executeUpdate();
            ps.close();

        } catch (SQLException ex) {
            Logger.getLogger(DAOSuiviEtPositionnement.class.getName()).log(Level.SEVERE, null, ex);
        }


        return obj;
    }

    // Delete : suppression d'un objet en base.
    @Override
    public void delete(int id) {
        Connection connect = this.connect;
        String sql = "DELETE FROM suivietpositionnement WHERE idSuiviEtPositionnement = ?";
        try {
            PreparedStatement ps = connect.prepareStatement(sql);
            ps.setInt(1, id);
            ps.executeUpdate();
            ps.close();
        } catch (SQLException ex) {
            Logger.getLogger(DAOSuiviEtPositionnement.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public int getMax() {
        int res = 0;
        try {
            ResultSet result = this.connect
                    .createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE).executeQuery(
                    "SELECT MAX('idSuiviEtPositionnement') as id");
            if (result.first()) {
                res = result.getInt("id");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return res;
    }
}
